//package com.ncst.mvcweb;
//
//// 状态接口
//interface OrderState {
//    void pay(Order order);
//    void ship(Order order);
//    void deliver(Order order);
//    void cancel(Order order);
//}
//
//// 具体状态类：新订单
//class NewState implements OrderState {
//    @Override
//    public void pay(Order order) {
//        System.out.println("支付成功");
//        order.setState(new PaidState());
//    }
//    @Override
//    public void ship(Order order) {
//        System.out.println("请先完成支付");
//    }
//    @Override
//    public void deliver(Order order) {
//        System.out.println("订单尚未发货");
//    }
//    @Override
//    public void cancel(Order order) {
//        System.out.println("订单已取消");
//        order.setState(new CanceledState());
//    }
//}
//
//// 具体状态类：已支付
//class PaidState implements OrderState {
//
//    @Override
//    public void pay(Order order) {
//        System.out.println("订单已支付，无需重复支付");
//    }
//
//    @Override
//    public void ship(Order order) {
//        System.out.println("商品已发货");
//        order.setState(new ShippedState());
//    }
//    public void deliver(Order order) {
//        System.out.println("商品尚未发出，无法签收");
//    }
//
//    @Override
//    public void cancel(Order order) {
//        System.out.println("取消订单，退款处理中...");
//        order.setState(new CanceledState());
//    }
//}
//
//// 具体状态类：已发货
//class ShippedState implements OrderState {
//    @Override
//    public void pay(Order order) {
//        System.out.println("订单已支付");
//    }
//    @Override
//    public void ship(Order order) {
//        System.out.println("商品已在运输途中");
//    }
//    @Override
//    public void deliver(Order order) {
//        System.out.println("商品已签收");
//        order.setState(new DeliveredState());
//    }
//
//    @Override
//    public void cancel(Order order) {
//        System.out.println("商品已发货，无法取消");
//    }
//}
//
//// 上下文类（订单）
//class Order {
//    private OrderState currentState;
//    public Order() {
//        currentState = new NewState();
//    }
//    void setState(OrderState state) {
//        currentState = state;
//    }
//    public void pay() {
//        currentState.pay(this);
//    }
//    public void ship() {
//        currentState.ship(this);
//    }
//    public void deliver() {
//        currentState.deliver(this);
//    }
//    public void cancel() {
//        currentState.cancel(this);
//    }
//}
//
//// 客户端使用示例
//public class StatePatternDemo {
//    public static void main(String[] args) {
//        Order order = new Order();
//
//        order.ship(); // 输出：请先完成支付
//        order.pay(); // 输出：支付成功
//        order.pay();// 输出：订单已支付，无需重复支付
//        order.ship();  // 输出：商品已发货
//        order.cancel(); // 输出：商品已发货，无法取消
//        order.deliver();// 输出：商品已签收
//    }
//}
